package controlador;

import modelo.*;
import vista.VentanaOperaciones;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.JComboBox;

public class ControladorVentanaOperaciones implements ActionListener {
  
    private VentanaOperaciones ventanaOperaciones; 
    private Estacionamiento estacionamiento;
    
    private static final String COLORES[] = {"Amarillo", "Azul", "Rojo", "Verde", "Gris"};
	
	public ControladorVentanaOperaciones(Estacionamiento estacionamiento) {
		ventanaOperaciones= new VentanaOperaciones();
		ventanaOperaciones.setLocationRelativeTo(null);
		ventanaOperaciones.setVisible(true);	
		ventanaOperaciones.agregarListener(this);
		this.estacionamiento=estacionamiento;
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand().equalsIgnoreCase("Agregar")){ 
			agregarVehiculoEstacionamiento();
		}	
		else 
			cambioRdbOpciones();	 
	}
	
	// Metodo para realizar acciones segun el JRadioButton
	// que se encuentre seleccionado
	private void cambioRdbOpciones() {
		//Obtener la opción (Agregar o Retirar Vehiculo) seleccionada por el usuario
		String figuraSeleccionada=ventanaOperaciones.getOpcionSeleccionada();	
		// Si es la Opción Agregar Vehiculo, se coloca visible el panel con los datos
		if (figuraSeleccionada.equals("Agregar Vehiculo al Estacionamiento")) {
		   ventanaOperaciones.setVisiblePanelDatosVehiculo(true);
		}
		// Si esta seleccionada la opción Retirar Vehiculo
		else{
			ventanaOperaciones.setVisiblePanelDatosVehiculo(false);
			retirarVehiculoEstacionamiento();
		}
	}
	
	private void agregarVehiculoEstacionamiento() {
		try {
			String marca = ventanaOperaciones.getMarca();
			int anno = Integer.parseInt(ventanaOperaciones.getAnno());
			
			 //Se asignan aleatoriamente dos colores para  el Vehículo a agregar al estacionamiento
			int indiceColor1=(int)Math.floor(Math.random()*5);
			int indiceColor2=(int)Math.floor(Math.random()*5);
			String color1 = COLORES[indiceColor1];
			String color2 = COLORES[indiceColor2];
			
			Vehiculo vehiculo = new Vehiculo(anno,marca,color1, color2);
			
			estacionamiento.agregarVehiculo(vehiculo);
			
			ventanaOperaciones.mostrarMensaje("El vehiculo del año: "+vehiculo.getAnno()+
					", marca: "+ vehiculo.getMarca()+	" y colores: "+vehiculo.getColores()+
					" se ha agregado al Estacionamiento satisfactoriamente.");		

			ventanaOperaciones.blanquearCampos();
			ventanaOperaciones.mostrarDatos("En el estacionamiento hay "+estacionamiento.contarVehiculos()+" vehiculos");				
		}
		catch(NumberFormatException e) {
			// Mensaje de Dialogo en caso de que ocurra una excepcion en la conversion de numeros
			ventanaOperaciones.mostrarMensaje("El año del Vehiculo debe ser Numeros Enteros");
		}
		catch(Exception e) {
			// Mensaje de Dialogo en caso de que ocurra cualquier otra excepcion
			ventanaOperaciones.mostrarMensaje(e.toString());
		}
	}

	
	private void retirarVehiculoEstacionamiento() {
		/* 
		 * Antes de retirar un vehículo del estacionamiento se verifica que el
		 * estacionamiento no este vacio
		 */
		 if (estacionamiento.contarVehiculos() > 0) { 
		 
			// Se debe retirar del estacionamiento un vehículo en forma aleatoria 		 
		    int totalVehiculos=estacionamiento.contarVehiculos();
			int indice = (int)Math.floor(Math.random()*totalVehiculos);
			
			Vehiculo vehiculoRetirado;
			vehiculoRetirado=estacionamiento.sacarVehiculo(indice);
			ventanaOperaciones.mostrarMensaje("Se retiro un vehiculo del año "+vehiculoRetirado.getAnno()+
					", marca: "+ vehiculoRetirado.getMarca()+	" y colores "+vehiculoRetirado.getColores());
	
			ventanaOperaciones.mostrarDatos("En el estacionamiento quedan "+estacionamiento.contarVehiculos()+" vehiculos");
			
		 }
		 else
			ventanaOperaciones.mostrarMensaje("No hay vehiculos en el estacionamiento");
		 
		//Luego de retirado el vehiculo del estacionamiento, dejar seleccionada la Opción Agregar Vehiculo
		ventanaOperaciones.seleccionarOpcionAgregarVehiculo();
		ventanaOperaciones.setVisiblePanelDatosVehiculo(true);
	}
		
}
